using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Didsoft.DataAccess.NHibernate.Extensions;
using NHibernate;
using NHibernate.Criterion;
using Didsoft.DataAccess.NHibernate;
using Didsoft.DataAccess.Contracts;
using Boa.HD.AccesoDatos.Entidades;
using Boa.HD.AccesoDatos.Contratos;
using Boa.HD.AccesoDatos.Entidades.DTO.Reportes;

namespace Boa.HD.AccesoDatos.Contexto
{
   public class HD_TecnicoAccesoDatos : DataAccessBase<HD_Tecnico>, IHD_TecnicoAccesoDatos
   {
     public HD_TecnicoAccesoDatos()
     {
     }
     
     /// <summary>
     /// Devuelve una lista IList<HD_Tecnico> con todas las ocurrencias encontradas, en base a filtro.
     /// </summary>
     /// <param name="filtro"></param>
     /// <returns></returns>
     public IList<HD_Tecnico> BuscarPorFiltro(string filtro)
     {
             ICriteria criteria = Session.CreateCriteria(typeof(HD_Tecnico));
             criteria.Add(Expression.Like("Nombre", filtro+"%")); 
             return criteria.List<HD_Tecnico>();
     }

     public IList<DtoPromedioTecnico> GetPromedioPorTecnico()
     {

         string sql = @"select  t.TecnicoId,
                                NombreTecnico = t.Nombre,       
                                MinutosOcupados = SUM(case when hpa.HistoriaProblemaAsistidoId is not null 
	                                                  then dp.MinutosEstimacionSolucion else 0 end)

                        from HD_AsignacionTecnicoProblema atp
                        inner join HD_Tecnico t on t.TecnicoId = atp.TecnicoId
                        inner join HD_DefinicionProblema dp on dp.DefinicionProblemaId = atp.DefinicionProblemaId
                        left join HD_HistoriaProblemaAsistido hpa on hpa.AsignacionTecnicoProblemaId = atp.AsignacionTecnicoProblemaId 
                              and (hpa.EstadoTrabajoId not in (select et.EstadoTrabajoId from HD_EstadoTrabajo et where et.EsCerrado = 1))

                        group by t.TecnicoId, t.Nombre";

         var query = Session.CreateSQLQuery(sql);
         return query.ListBeanTransformer<DtoPromedioTecnico>();

     }


   }
}

